#ifndef HOME_PAGE_H
#define HOME_PAGE_H

#include "weatherdata.h"

#include <QMainWindow>
#include <mainwindow.h>

#include <QObject>

#include <QNetworkAccessManager>
#include <QNetworkReply>

#include <QJsonObject>
#include <QJsonArray>
#include <QJsonDocument>

#include <QMediaPlayer>
#include <QMediaPlaylist>
#include <QUrl>
#include <QIcon>
#include <QTimer>
#include <QListWidgetItem>
#include <QFileDialog>
#include <QDir>
#include <QMap>
#include <QPainter>

#define INCREMENT 3    // 温度每升高/降低1°，y轴坐标的增量
#define POINT_RADIUS 3  // 曲线描点的大小
#define TEXT_OFFSET_X 12
#define TEXT_OFFSET_Y 12

namespace Ui {
class Home_Page;
}

class Home_Page : public QMainWindow
{
    Q_OBJECT

public:
    explicit Home_Page(QWidget *parent = nullptr);
    ~Home_Page();

    // 登录窗口对象
    MainWindow log_in;
    QString user;

    QNetworkAccessManager * mNetAccessManager;

    // 今天的天气数据
    Today mToday;
    // 未来几天的天气数据
    Day mDay[6];

    // 星期和日期
    QList<QLabel*> mWeekList;
    QList<QLabel*> mDateList;

    // 天气和天气图标
    QList<QLabel*> mTypeList;
    QList<QLabel*> mTypeIconList;

    // 天气污染指数
    QList<QLabel*> mAqiList;

    // 风力和风向
    QList<QLabel*> mFxList;
    QList<QLabel*> mFlList;

    // 图标
    QMap<QString, QString> mTypeMap;

private:
    void onReplid(QNetworkReply* reply);

public slots:
    // void json_recv_data(QNetworkReply* reply);// 网络请求结果处理槽函数

public:
    // 音乐
    // 音频对象
    QMediaPlayer * mediaPlayer;
    QUrl Media_Url;

    qint64 Media_max;

    // 定时器 用于刷新 进度
    QTimer * Media_time;

    // 列表音频项目
    QListWidgetItem * Media_Item;

    // 初始化音乐
    void my_music();
private:
    QList<QString> songList;   // 播放列表
    QString currentSong;       // 当前播放的歌曲
    int currentSongIndex = 0;  // 当前播放索引

    enum PlaybackMode {
        Sequential,    // 顺序播放
        Random,        // 随机播放
        Loop            // 循环播放
    };

    PlaybackMode playbackMode;

private slots:
    // 音乐
    // 开始与暂停
    void on_pushButton_start_clicked();

    // 上一首
    void on_prevButton_clicked();

    // 下一首
    void on_nextButton_clicked();

    // 音量
    void on_volumeSlider_valueChanged(int value);

    // 进度条
    void on_progressSlider_valueChanged(int value);

    void setPlaybackMode(PlaybackMode mode);

    void updatePlaybackModeUI();

    // 播放模式
    void on_playbackModeComboBox_currentIndexChanged(int index);

    // 增加音乐
    void on_addMusicButton_clicked();

    // 天气预报搜索
    void on_researchButton_clicked();

    void on_pushButton_night_clicked();

    void on_pushButton_home_clicked();

    void on_pushButton_out_clicked();

    void on_pushButton_getbed_clicked();

public:
    // 记录偏差坐标
    QPoint off_Pox;
    // 判断是否为左键按下 按下为true
    bool is_key = false;

protected:
    // 按下
    void mousePressEvent(QMouseEvent *event);

    // 松开
    void mouseReleaseEvent(QMouseEvent *event);

    // 移动
    void mouseMoveEvent(QMouseEvent * event);

    // 键盘事件 按下esc退出
    void keyPressEvent(QKeyEvent *event);

    // 获取天气数据
    void getWeatherInfo(QString cityName);

    // 解析json
    void parseJson(QByteArray& byteArray);

    // 更新UI
    void updateUI();

    // 重写父类的eventFilter方法
    bool eventFilter(QObject* watched, QEvent* event);

    // 绘制高低温曲线
    void paintHighCurve();
    void paintLowCurve();

private:
    Ui::Home_Page *ui;
};

#endif // HOME_PAGE_H
